desc: chaos tone generator

/* 
by Elan Hickler 
www.elanhickler.com 
www.soundemote.com
*/

slider1:2<0,1000,.01>base frequency
slider2:0<0,3,1{stereo chaos,chaos A,chaos B, mono mix}>output
slider4:1<0,1,.0001>chaos filter
slider5:302<0,10000,.001>frequency offset
slider6:139<0,6000,.001>FM1 amount
slider7:257<0,5000,.001>FM2 amount
slider8:1<0,4000,.001>chaos gain
slider9:.5<0,1,.001>volume

@init
pos = 0;
pi = $pi;
twopi = 2*pi;

@slider


@sample
cutoff = 1-slider4;
cutoff = buf16 = (cutoff * (1-.99)) + (buf16 * .99);

gain = slider8;
gain = buf18 = (gain * (1-.999)) + (buf18 * .999);

/*OSCILLATOR 1*/
frequency = abs(slider1);
frequency = buf17 = (frequency * (1-.999)) + (buf17 * .999);
adj = twopi/srate*frequency*out2*slider6;
pos+=adj;
pos >= twopi ? pos -= twopi;
out1 = sin(pos);

/*FILTER*/
buf0 = out1 * (1-cutoff) + (buf0 * cutoff);
buf1 = buf0 * (1-cutoff) + (buf1 * cutoff);
buf2 = buf1 * (1-cutoff) + (buf2 * cutoff);
buf3 = buf2 * (1-cutoff) + (buf3 * cutoff);
buf4 = buf3 * (1-cutoff) + (buf4 * cutoff);
buf5 = buf4 * (1-cutoff) + (buf5 * cutoff);
buf6 = buf5 * (1-cutoff) + (buf6 * cutoff);
buf7 = buf6 * (1-cutoff) + (buf7 * cutoff);
buf8 = buf7 * (1-cutoff) + (buf8 * cutoff);
buf9 = buf8 * (1-cutoff) + (buf9 * cutoff);
buf10 = buf9 * (1-cutoff) + (buf10 * cutoff);
buf11 = buf10 * (1-cutoff) + (buf11 * cutoff);
buf12 = buf11 * (1-cutoff) + (buf12 * cutoff);
buf13 = buf12 * (1-cutoff) + (buf13 * cutoff);
buf14 = buf13 * (1-cutoff) + (buf14 * cutoff);
buf15 = buf14 * (1-cutoff) + (buf15 * cutoff);
out1=buf0;

/*OSCILLATOR 2*/
frequency2 = out1*slider7+slider5;
adj2 = twopi/srate*frequency2;
pos2+=adj2;
pos2 >= twopi ? pos2 -= twopi;
out2 = sin(pos2);

/*LIMITER*/
out1 > 2 ? out1 = 2;
out1< -2 ? out1 = -2;
out2 > 2 ? out2 = 2;
out2 < -2 ? out2 = -2;

out1 = out1*gain;
out2 = out2*gain;

finalout1 = out1*(1/gain)*slider9;
finalout2 = out2*(1/gain)*slider9;

slider2 == 0 ? (spl0 = finalout1; spl1 = finalout2);
slider2 == 1 ? spl0 = spl1 = finalout1;
slider2 == 2 ? spl0 = spl1 = finalout2;
slider2 == 3 ? spl0 = spl1 = (finalout1-finalout2)/2;


